package demo08冒泡排序;

import java.util.Arrays;

public class Demo08 {
    public static void main(String[] args) {

        int[] array = {1,7,2,8,9,4,3,5,520,788,233};

        System.out.println(Arrays.toString(sortmin(array)));


    }


    //冒泡排序（降序）
    //1.比较数组中，俩个相玲的元素，如果第一个数比第二个数大，我们就交换他们的位置
    //2.没一次比较都会产出一个最大，或者最小的数字
    //3.下一轮则可以少一次排序
    //4.依此循环，知道结束

    public static  int[] sort(int[] array) {
        //临时变量
        int temp = 0;

        boolean flag = false;//优化减少已经排好序的计算（降序）

        //外层循环，判断我们这个要走多少次
        for (int i = 0; i < array.length - 1; i++) {
            //内层循环，比较俩个数，如果第一个数，比第二个数大，则交换位置
            for (int j = 0; j < array.length-1-i ; j++) {   //-i是为了减少已经选出最大值或最小值后的轮次
                    if (array[j+1] > array[j]){
                        //类比玻璃瓶，既有瓶子(容器)又有不同的水（值）（堆）

                        temp = array[j];       //把前面一位的小值放进temp中（现在小值位子上的值为空）默认0
                        array[j] = array[j+1]; //再把后面大值赋予前面空出来的值小的那个（现在大值位子为空）
                        array[j+1] = temp;     //再把前面的小值赋予后面的大值
                        flag=true;
                    }
            }
            if(flag == false){
                break;
            }
        }
        return array;
    }



    //冒泡排序（升序）
    public static  int[] sortmin(int[] array) {
        //临时变量
        int temp = 0;

        boolean flag = false;//优化减少已经排好序的计算（降序）

        //外层循环，判断我们这个要走多少次
        for (int i = 0; i < array.length - 1; i++) {
            //内层循环，比较俩个数，如果第一个数，比第二个数大，则交换位置
            for (int j = 0; j < array.length-1-i ; j++) {   //-i是为了减少已经选出最大值或最小值后的轮次
                if (array[j+1] < array[j]){
                    //类比玻璃瓶，既有瓶子(容器)又有不同的水（值）（堆）

                    temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                    flag=true;
                }
            }
            if(flag == false){
                break;
            }
        }
        return array;
    }
}
